前言與解釋有點長,只看C++規則怎麼用請直接往下滑到Class類別
閱讀此篇前請先看一下Day10結構Struct,會更理解。
咳咳,來說一個小離題的事情,在寫Javascript的時候,裡面有個東西我怎麼都弄不懂,這個東西就是 --- this。
這個小東西可把我折磨慘了,雖然大致知道要把this放在哪,但就是怎麼都不懂為什麼,常常也會忘記放,debug時摸摸鼻子嘆一口氣,不知道有沒有寫JS的同志們也經歷過這個問號期。
這幾天會從class到constructor,之後會一路聊到inheritance最後是polymophsim,希望能打通任督二脈,扎實的把觀念弄清楚!(握拳。
其實class超級簡單,就是一種多功能分類箱
以下是C++三種分類箱:
return a+b;
或是cout << "hello";
等等)的分類箱。int, string
...等等)的分類箱。為什麼要用分類箱?
沒在開玩笑,我們可以藉由上面三條發現,class很簡單(雖然看課本時看了十次也不懂到底是何用處),就是用來分類,可以節省時間,增加效率,把相似的functions、variables們裝在一起,到時候方便找,類似書籤的概念,比方說這堆都是關於書的資料作者出版社,那堆在講關於汽車的型號與顏色,分別裝在一起到時候方便找,也好維護。
(以上這堆話現在看起來可能完全沒有意義,沒關係,請繼續看下去吧)
同理,loop也是一樣的概念,雖然對電腦來說不管用loop還是一行一行code,都是一樣跑n次,但在要跑100萬次的情況下可以節省我們寫一百萬行程式碼的時間及眼睛淚液,是不是很划算。
如系列第一篇文章說的,程式的本意就是為了提高效率,人需要休息,電腦重複重複計算不會累,因此程式碼的效能好不好,維護方不方便就很重要。
越少行程式碼,電腦需要運行的次數是不是就更少了?是不是就能更省電環保救北極熊?
說起來簡直太完美了,如果電腦能自己學習調整,那該有多好,人工智慧有一派學說認為有一個演算法是能夠涵蓋所有,讓電腦能夠擁有學習思考能力“終極”的演算法,也許我們一生都沒辦法發明出一個新演算法改變世界,但學會class後“馬上”就能夠拯救我們的眼睛跟肩膀。
(關於效率跟時間,aka時間複雜度time complexity,等聊完class後想來專門開一天仔細說明,雖然這應該算是資料結購了(誤)
一般情況下,假如當我們想要做一個家中書本資料的統計,記錄書名、作者和價錢。
然後放在C++裡面,可以怎麼做呢?
轉頭一看,書架上第一本書叫做Turing's Cathedral,作者是George Dyson,價錢19.99(忘記實際多少錢)。
#include <iostream>
using namespcae std;
int main(){
string bookname1, author1; //書的這些資料用字串
float price1; //書的價錢可能有小數點用float(書商很喜歡定價USD29.99之類的
author1 = "George Dyson";
bookname1 = "Turing's Cathedral";
price1 = 19.99;
cout << "Book name: " << bookname1 << endl;
cout << "Author: " << author1 << endl;
cout << "Price: $" << price1 << endl;
return 0;
}
很好,第一本書成功輸出。
阿,還有第二本,怎麼辦?
每本書都declare各自的書名、作者、價錢,然後放進去,bookname2, bookname3....
、author2, author 3.....
、price2, price3.....
?
這樣總共要打幾行variable?
一本書需要三個variable,加上輸出三行輸入三行,9行。
假設有150本書,9 * 150 = 1350行...
好消息,我們明天會來仔細聊聊有個方法可以省略這個冗長的過程,以下是範例:
#include <iostream>
class book { //class本人在這,現在他被我設定叫做book
private: //私人區域,超出這個class裡都拿不到
public: //公共區域,可以在別的class或是main裡面取用
string bookname, author; //書的這些資料用字串
float price; //書的價錢可能有小數點用float(書商很喜歡定價USD29.99之類的
}
int main(){
book b1; //製作一個新的object叫做b1(第一本書)
b1.author = "George Dyson"; //在b1這個object裡作者是Dyson
b1.bookname = "Turing's Cathedral"; //b1的書名為Turing's Cathedral
b1.price = 19.99; //同上 //b1的價錢為19.99
//以下呼叫b1的各種properties出到console
cout << "Book name: " << b1.bookname<<endl;
cout << "Author: " << b1.author<< endl;
cout << "Price: $" << b1.price<< endl;
return 0;
}
等等,什麼是book b1 object?
沒關係因為這篇只是物件導向第一篇而已,明天會專門來認識他。
請搭直通車Object物件